﻿using System;
using System.Collections.Generic;
using System.Text;

using SIMA.Entities;
using SIMA.Core.Data.Access;
using SIMA.Core.Enums;
using SIMA.Core.Data.Collection;
using SIMA.Controls;
using SIMA.Mvvm.Base;
//using SIMA.Interfaces;
using System.ServiceModel;

namespace SIMA.Mvvm.Gestiones
{
    //public class MvvmGestionarUsuarios:AccessClass<T_C_Usuario>
    //{

    //    #region Consts

    //    private const string TABLEID = "24";

    //    #endregion

    //    #region Fields

    //    private SmartContainer<T_C_Usuario> usuariosSmart;
    //    private SmartContainer<T_C_Estado> estadosSmart;
    //    private SmartContainer<T_C_Perfil> perfilesSmart;

    //    private T_C_Usuario usuarioSeleccion;
    //    private T_C_Perfil perfilSeleccion;
    //    private T_C_Estado estadoSeleccion;
    //    private List<T_C_Usuario> usuarios;
    //    private List<T_C_Estado> estados;
    //    private List<T_C_Perfil> perfiles;
    //    private FilterType filtro;

    //    #endregion

    //    #region Properties

    //    public T_C_Usuario UsuarioSeleccion
    //    {
    //        get
    //        {
    //            return usuarioSeleccion;
    //        }
    //        set
    //        {
    //            usuarioSeleccion = value;
    //            this.RaisePropertyChanged("UsuarioSeleccion");
    //        }
    //    }
    //    public T_C_Perfil PerfilSeleccion
    //    {
    //        get
    //        {
    //            return perfilSeleccion;
    //        }
    //        set
    //        {
    //            perfilSeleccion = value;
    //            this.RaisePropertyChanged("PerfilSeleccion");
    //        }
    //    }
    //    public T_C_Estado EstadoSeleccion
    //    {
    //        get
    //        {
    //            return estadoSeleccion;
    //        }
    //        set
    //        {
    //            estadoSeleccion = value;
    //            this.RaisePropertyChanged("EstadoSeleccion");
    //        }
    //    }
    //    public List<T_C_Usuario> Usuarios
    //    {
    //        get
    //        {
    //            return usuarios;
    //        }
    //        set
    //        {
    //            usuarios = value;
    //            this.RaisePropertyChanged("Usuarios");
    //        }
    //    }
    //    public List<T_C_Estado> Estados
    //    {
    //        get
    //        {
    //            return estados;
    //        }
    //        set
    //        {
    //            estados = value;

    //        }
    //    }
    //    public List<T_C_Perfil> Perfiles
    //    {
    //        get
    //        {
    //            return perfiles;
    //        }
    //        set
    //        {
    //            perfiles = value;
    //            this.RaisePropertyChanged("Perfiles");
    //        }
    //    }

    //    #endregion

    //    #region Events

    //    public event EventHandler CompleteAction;

    //    #endregion

    //    #region Constructor

    //    public MvvmGestionarUsuarios()
    //    {
    //        Init();
    //    }

    //    #endregion

    //    #region Private Methods

    //    private void Init()
    //    {
    //        DataAccess.SetConnection(SIMA.Core.Enums.AccessType.FromString, CADCONNECTIONSTRING);
    //        usuariosSmart = new SmartContainer<T_C_Usuario>();
    //        estadosSmart = new SmartContainer<T_C_Estado>();
    //        perfilesSmart = new SmartContainer<T_C_Perfil>();
    //        usuariosSmart.CollectionChanged += new EventHandler(usuariosSmart_CollectionChanged);
    //        usuariosSmart.Deleted += new EventHandler<SIMA.Core.EventArgs.DeletedEventArgs>(usuariosSmart_Deleted);
    //        usuariosSmart.Failed += new EventHandler<SIMA.Core.EventArgs.FailedEventArgs>(usuariosSmart_Failed);
    //        usuariosSmart.Inserted += new EventHandler<SIMA.Core.EventArgs.InsertedEventArgs>(usuariosSmart_Inserted);
    //        usuariosSmart.Updated += new EventHandler<SIMA.Core.EventArgs.UpdatedEventArgs>(usuariosSmart_Updated);
    //        Perfiles = perfilesSmart["SelectActivePerfil", CommandType.StoredProcedure];
    //        StringBuilder strBuilder = new StringBuilder();
    //        strBuilder.Append("Id_Tabla = ");
    //        strBuilder.Append(TABLEID);
    //        Estados = estadosSmart[strBuilder.ToString(), CommandType.CommandText];
    //    }

    //    void usuariosSmart_CollectionChanged(object sender, EventArgs e)
    //    {
            
    //    }

    //    void usuariosSmart_Failed(object sender, SIMA.Core.EventArgs.FailedEventArgs e)
    //    {
            
    //    }

    //    void usuariosSmart_Updated(object sender, SIMA.Core.EventArgs.UpdatedEventArgs e)
    //    {
            
    //    }

    //    void usuariosSmart_Deleted(object sender, SIMA.Core.EventArgs.DeletedEventArgs e)
    //    {
            
    //    }

    //    void usuariosSmart_Inserted(object sender, SIMA.Core.EventArgs.InsertedEventArgs e)
    //    {
    //        SIMAMessageBox.Show(e.InstantInserted.ToShortTimeString(), "Usuario Registrado", SIMAMessageBoxButtons.OK, SIMAMessageBoxImage.Information);
    //    }

    //    #endregion

    //    #region Public Methods

    //    public override void Register(T_C_Usuario item)
    //    {
    //        item.Id_Perfil = perfilSeleccion.Id_Perfil;
    //        item.Id_Estado = estadoSeleccion.Id_Estado;
    //        usuariosSmart.Add(item);
    //    }

    //    public override void Delete(T_C_Usuario item)
    //    {
    //        usuariosSmart.Remove(item);
    //    }

    //    public override void Update(T_C_Usuario itemToUpdate, T_C_Usuario itemUpdated)
    //    {
    //        usuariosSmart.Update(itemToUpdate, itemUpdated);
    //    }

    //    public override void SelectAll()
    //    {
    //        usuariosSmart.SelectAll();
    //    }

    //    #endregion
        
    //}

    public class MvvmGestionarUsuarios : ViewModelBase
    {

        #region Consts

        private const string TABLEID = "24";
        private const string REGISTERMSG = "Usuario dado de alta exitosamente.";


        #endregion

        #region Fields

        private bool isBusy = false;
        private T_C_Usuario usuarioSeleccion;
        private T_C_Perfil perfilSeleccion;
        private T_C_Estado estadoSeleccion;
        private List<T_C_Usuario> usuarios;
        private List<T_C_Estado> estados;
        private List<T_C_Perfil> perfiles;
        private FilterType filtro;

        //private IUsuario usuarioProxy;
        //private IEstado estadoProxy;
        //private IPerfil perfilProxy;

        #endregion

        #region Properties

        public bool IsBusy
        {
            get
            {
                return isBusy;
            }
            set
            {
                isBusy = value;
                this.OnPropertyChanged("IsBusy");
            }
        }

        public T_C_Usuario UsuarioSeleccion
        {
            get
            {
                return usuarioSeleccion;
            }
            set
            {
                usuarioSeleccion = value;
                this.OnPropertyChanged("UsuarioSeleccion");
            }
        }
        public T_C_Perfil PerfilSeleccion
        {
            get
            {
                return perfilSeleccion;
            }
            set
            {
                perfilSeleccion = value;
                this.OnPropertyChanged("PerfilSeleccion");
            }
        }
        public T_C_Estado EstadoSeleccion
        {
            get
            {
                return estadoSeleccion;
            }
            set
            {
                estadoSeleccion = value;
                this.OnPropertyChanged("EstadoSeleccion");
            }
        }
        public List<T_C_Usuario> Usuarios
        {
            get
            {
                return usuarios;
            }
            set
            {
                usuarios = value;
                this.OnPropertyChanged("Usuarios");
            }
        }
        public List<T_C_Estado> Estados
        {
            get
            {
                return estados;
            }
            set
            {
                estados = value;

            }
        }
        public List<T_C_Perfil> Perfiles
        {
            get
            {
                return perfiles;
            }
            set
            {
                perfiles = value;
                this.OnPropertyChanged("Perfiles");
            }
        }

        #endregion

        #region Events

        public event EventHandler CompleteAction;

        #endregion

        #region Constructor

        public MvvmGestionarUsuarios()
        {
            Init();
        }

        #endregion

        #region Private Methods

        private void Init()
        {
            IsBusy = true;
            this.Connect();
            //Perfiles = perfilesSmart["SelectActivePerfil", CommandType.StoredProcedure];
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.Append("Id_Tabla = ");
            strBuilder.Append(TABLEID);
            //Estados = estadosSmart[strBuilder.ToString(), CommandType.CommandText];
        }


        #endregion

        #region Public Methods

        public void Register(T_C_Usuario item)
        {
            item.Id_Perfil = perfilSeleccion.Id_Perfil;
            item.Id_Estado = estadoSeleccion.Id_Estado;
            //usuariosSmart.Add(item);
        }

        public void Delete(T_C_Usuario item)
        {
            //usuariosSmart.Remove(item);
        }

        public void Update(T_C_Usuario itemToUpdate, T_C_Usuario itemUpdated)
        {
            //usuariosSmart.Update(itemToUpdate, itemUpdated);
        }

        public void SelectAll()
        {
            //usuariosSmart.SelectAll();
        }

        #endregion

        public bool Connect()
        {
            //DuplexChannelFactory<IUsuario> pipeFactoryUsuario = new DuplexChannelFactory<IUsuario>(new InstanceContext(this), new NetTcpBinding(), new EndpointAddress("net.tcp://192.168.1.33:18500/IUsuarioSubscription"));
            //DuplexChannelFactory<IPerfil> pipeFactoryPerfil = new DuplexChannelFactory<IPerfil>(new InstanceContext(this), new NetTcpBinding(), new EndpointAddress("net.tcp://192.168.1.33:18501/IPerfilSubscription"));
            //DuplexChannelFactory<IEstado> pipeFactoryEstado = new DuplexChannelFactory<IEstado>(new InstanceContext(this), new NetTcpBinding(), new EndpointAddress("net.tcp://192.168.1.33:18502/IEstadoSubscription"));
            //try
            //{
            //    usuarioProxy = pipeFactoryUsuario.CreateChannel();
            //    usuarioProxy.Subscribe();
            //    return true;
            //}
            //catch (Exception ex)
            //{
            //    SIMAMessageBox.Show(DateTime.Now.ToShortTimeString(), ex.Message, SIMAMessageBoxButtons.OK, SIMAMessageBoxImage.Error);
            //    return false;
            //}
            return true;
        }
        public void Close()
        {
            //usuarioProxy.Unsubscribe();
        }


    }
}
